using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 6/24/2014 5:31:21 PM
    /// </summary>
    [Serializable]
    public class NotificacionesLista : ReadOnlyListBase<NotificacionesLista, NotificacionInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(NotificacionesLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static NotificacionesLista GetNotificacionesLista(AlertaNotificacionCriteria filter)
        {
            return DataPortal.Fetch<NotificacionesLista>(filter);
        }

        private NotificacionesLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(AlertaNotificacionCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_archivo_id", criteria.ArchivoId),
                        new Parametro("ec_id", criteria.TablaId),
                        new Parametro("ec_tabla", criteria.Tabla)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_ALERTA_PRO\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(NotificacionInfo.GetNotificacionInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 6/24/2014 5:31:21 PM
    /// </summary>
    [Serializable]
    public class NotificacionInfo : ReadOnlyBase<NotificacionInfo>
    {
        #region Business Methods

        public Guid   IdExpediente { get; internal set; }
        public String PromotorId { get; internal set; }
        public String PromotorEmail { get; internal set; }
        public String PromotorNombres { get; internal set; }
        public String NombreExpediente { get; internal set; }
        public String DelegadoId { get; internal set; }
        public String DelegadoEmail { get; internal set; }
        public String DelegadoNombres { get; internal set; }
        #endregion

        #region Factory Methods

        internal static NotificacionInfo GetNotificacionInfo(DataRow childData)
        {
            return DataPortal.FetchChild<NotificacionInfo>(childData);
        }

        private NotificacionInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            if (childData.Table.Columns.Contains("exp_id"))
            {
                if (!(childData["exp_id"] is DBNull))
                IdExpediente = Guid.Parse(childData["exp_id"].ToString());
            }
            if (childData.Table.Columns.Contains("exp_nombre"))
            {
                if (!(childData["exp_nombre"] is DBNull))
                NombreExpediente = childData["exp_nombre"].ToString();
            }
            
            PromotorId = childData["per_promotor"].ToString();
            PromotorEmail = childData["email_promotor"].ToString();
            PromotorNombres = childData["nombre_promotor"].ToString();
            DelegadoId = childData["per_delegado"].ToString();
            DelegadoEmail = childData["email_delegado"].ToString();
            DelegadoNombres = childData["nombre_delegado"].ToString();
        }

        #endregion
    }
}
